## The functions rd_insert and rd_extend


from PyM import *


# def rd_nonzero_vector(K,n):
#     while True:
#         v = rd_vector(K,n)
#         if not is_zero(v): return v
# 
# 
# def rd_insert(A,r):
#     n = ncols(A)
#     if r<0 or r>n: return "r has to be in 0..n"
#     K = K_(A)
#     B = matrix(K,n+1,n+1)
#     B[0,r] = 1
#     for j in range(1,n+1):
#         B[j,r] = rd(K)
#     if r==0:
#         B[1:,1:] = A[:,:]
#     elif r==n:
#         B[1:,0:n] = A[:,:] 
#     else:
#        B[1:,0:r] = A[:,0:r] 
#        B[1:,r+1:n+1] = A[:,r:n] 
#     return B
#   
# def rd_extend(A):
#     n = ncols(A); K = K_(A)
#     v = rd_nonzero_vector(K,n+1)
#     r = 0
#     for j in range(n+1):
#         if v[j]!=0: 
#             r = j
#             break
#     A = rd_insert(A,r)
#     x = v[r]
#     for j in range(r+1,n+1):
#         A[:,j] = A[:,j]+ A[:,r]*v[j]
#     A[:,r] = x*A[:,r]
#     return A

# Examples



K = Zn(7)

show(rd_nonzero_vector(K,7))



A1 = matrix(K,[[3]])
A2 = rd_insert(A1,0)
A3 = rd_insert(A2,2)
A4 = rd_insert(A3,1)
A5 = rd_insert(A4,5)

show(A2)
show(A3)
show(A4)
show(A5)

V = vandermonde(vec([1,2,3,4,5,6],K),6)

show(rd_insert(V,2))


A2 = rd_extend(A1)
A3 = rd_extend(A2)
A4 = rd_extend(A3)
A5 = rd_extend(A4)

show(A2)
show(A3)
show(A4)
show(A5)

show(rd_extend(V))






